<?php

class TabuladorsController extends AppController {

    var $name = 'Tabuladors';
    var $layout = "ajax";
    var $components = array('Interfaz', 'Vista',);
    var $helpers = array('Interfaz', 'Vista', 'Ayuda',);
    var $uses = array('Tabulador', 'Almacen', 'Destino', );

    public function beforeFilter() {
        $this->validar();
    }

    function index($busq = null) {
        $this->permisos_menu_individual('tabuladores');
        $this->set('busq', $busq);
        $condiciones['Tabulador.id >'] = '0';
        $condiciones['Tabulador.estatus'] = 1;
        $filtros = '';
        if(!empty($this->request->data)){
            $filtros = $this->request->data;
            extract($filtros);
        }
        if(!empty($filtros) && isset($vent_filtro)){
            $this->set('opciones', $this->serializador($filtros, 2));
            if(!empty($origen_id))
                $condiciones['Tabulador.origen_id'] = $origen_id;
            if(!empty($estado_id))
                $condiciones['Destino.estado_id'] = $estado_id;
            if(!empty($destino_id))
                $condiciones['Tabulador.destino_id'] = $destino_id;
            if(!empty($precio_ton))
                $condiciones['CAST(Tabulador.precio_ton AS varchar(20)) ILIKE'] = "%" . $this->Interfaz->miles_postgres($precio_ton) . "%";
            if(!empty($caleta_carga))
                $condiciones['CAST(Tabulador.caleta_carga AS varchar(20)) ILIKE'] = "%" . $this->Interfaz->miles_postgres($caleta_carga) . "%";
            if(!empty($caleta_descarga))
                $condiciones['CAST(Tabulador.caleta_descarga AS varchar(20)) ILIKE'] = "%" . $this->Interfaz->miles_postgres($caleta_descarga) . "%";
            if(!empty($distancia))
                $condiciones['CAST(Tabulador.distancia AS varchar(20)) ILIKE'] = "%" . $this->Interfaz->miles_postgres($distancia) . "%";
            if(!empty($flete))
                $condiciones['CAST(Tabulador.flete AS varchar(20)) ILIKE'] = "%" . $this->Interfaz->miles_postgres($flete) . "%";
        }
        $data = $this->Tabulador->find('all', array('conditions' => $condiciones, 'order' => 'Almacen.codigo, Almacen.nombre, Destino.codigo, Destino.nombre', 'limit' => MAX_PAGI));
        $mostrar = (count($data) > MAX_PAGI) ? MAX_PAGI : count($data);
        $this->set('data', $data);
        $this->Vista->title("Listado de Tabuladores Encontrados (Mostrando $mostrar de " . count($data) . " Registros Encontrados)");
        if(isset($vent_filtro))
            $this->Vista->cerrar_ventana($vent_filtro);
        //$this->log(1);
    }

    public function nuevo() {
        $this->permisos_accion_individual('tabuladores', 'nuevo');
        $listaOrigenes = $this->Almacen->find('list', array('fields' => 'Almacen.id, Almacen.nombre', 'conditions' => array('Almacen.id >' => '0', 'Almacen.estatus' => 1, 'Almacen.tipo' => array(1, 3)), 'order' => 'Almacen.codigo'));
        $this->set('listaOrigenes', $listaOrigenes);
        $this->set('listaEstados', $this->Utilitario->lista_estados());
    }

    public function guardar() {
        $this->permisos_accion_individual('tabuladores', 'nuevo');
        $data = $this->request->data;
        if (!$this->Vista->empyt($data, array())) {
            extract($data);
            $this->Tabulador->query('BEGIN WORK');
            $data['Tabulador']['origen_id'] = $origen_id;
            $data['Tabulador']['destino_id'] = $destino_id;
            $data['Tabulador']['precio_ton'] = $this->Interfaz->miles_postgres($precio_ton);
            $data['Tabulador']['caleta_carga'] = $this->Interfaz->miles_postgres($caleta_carga);
            $data['Tabulador']['caleta_descarga'] = $this->Interfaz->miles_postgres($caleta_descarga);
            $data['Tabulador']['distancia'] = $distancia;
            $data['Tabulador']['flete'] = $this->Interfaz->miles_postgres($flete);

            if ($this->Tabulador->save($data)) {
                $this->Tabulador->query('COMMIT');
                $this->Vista->mensaje("Guardado Exitosamente", 'EXITO');
                $this->Vista->cerrar_ventana($vent_nuevo);
                //$this->log('imprimir');
            } else {
                $this->Tabulador->query('ROLLBACK');
                $this->Vista->mensaje("Ocurrio un error Guardando", 'ERROR', 'codigo');
            }
        } else {
            $this->Vista->mensaje("Faltan campos requeridos", 'ERROR');
        }
        $this->index();
        $this->render('index');
    }

    public function modificar($id = null) {
        $this->permisos_opcion_individual('tabuladores', 'estatus', 'modificar');
        $data = $this->request->data;
        if (!empty($data)) {
            if (!$this->Vista->empyt($data, array())) {
                extract($data);
                $id = $this->Interfaz->id($id_tabulador);
                $this->Tabulador->query('BEGIN WORK');
                $data['Tabulador']['id'] = $id;
                $data['Tabulador']['origen_id'] = $origen_id;
                $data['Tabulador']['destino_id'] = $destino_id;
                $data['Tabulador']['precio_ton'] = $this->Interfaz->miles_postgres($precio_ton);
                $data['Tabulador']['caleta_carga'] = $this->Interfaz->miles_postgres($caleta_carga);
                $data['Tabulador']['caleta_descarga'] = $this->Interfaz->miles_postgres($caleta_descarga);
                $data['Tabulador']['distancia'] = $distancia;
                $data['Tabulador']['flete'] = $this->Interfaz->miles_postgres($flete);

                if ($this->Tabulador->save($data)) {
                    $this->Tabulador->query('COMMIT');
                    $this->Vista->mensaje("Guardado Exitosamente", 'EXITO');
                    $this->Vista->cerrar_ventana($vent_nuevo);
                    //$this->log('imprimir');
                } else {
                    $this->Tabulador->query('ROLLBACK');
                    $this->Vista->mensaje("Ocurrio un error Guardando", 'ERROR', 'codigo');
                }
            } else
                $this->Vista->mensaje("Faltan campos requeridos", 'ERROR');
            $this->index();
            $this->render('index');
        } else {
            $id = $this->Interfaz->id($id);
            if (is_numeric($id)) {
                $resultado = $this->Tabulador->find('first', array('conditions' => array('Tabulador.id' => $id)));
                $this->set('data', $resultado);
                $listaOrigenes = $this->Almacen->find('list', array('fields' => 'Almacen.id, Almacen.nombre', 'conditions' => array('Almacen.id >' => '0', 'Almacen.estatus' => 1, 'Almacen.tipo' => array(1, 3)), 'order' => 'Almacen.codigo'));
                $this->set('listaOrigenes', $listaOrigenes);
                $this->set('listaEstados', $this->Utilitario->lista_estados());
                $listaDestinos = $this->Almacen->find('list', array('fields' => 'Almacen.id, Almacen.nombre', 'conditions' => array('Almacen.id >' => '0', 'Almacen.estatus' => 1, 'Almacen.tipo' => array(2, 3), 'Almacen.estado_id' => $resultado['Destino']['estado_id']), 'order' => 'Almacen.codigo'));
                $this->set('listaDestinos', $listaDestinos);
            } else {
                $this->Vista->mensaje("Tabulador Inv&aacute;lido", 'ERROR');
                $this->render("../" . PRINCIPAL . "/mensajes");
            }
        }
    }

    public function eliminar($id = null) {
        $this->permisos_opcion_individual('tabuladores', 'estatus', 'eliminar');
        $id = $this->Interfaz->id($id);
        if (is_numeric($id)) {
            $this->Tabulador->query('BEGIN WORK');
            $data['Tabulador']['id'] = $id;
            $data['Tabulador']['estatus'] = 0;
            if ($this->Tabulador->save($data)) {
                $this->Tabulador->query('COMMIT');
                $this->Vista->mensaje("Eliminado Exitosamente", 'EXITO');
                //$this->log('imprimir');
            } else {
                $this->Tabulador->query('ROLLBACK');
                $this->Vista->mensaje("Ocurrio un error Eliminando", 'ERROR');
            }
        } else {
            $this->Vista->mensaje("Tabulador Inv&aacute;lido", 'ERROR');
            $this->render("../" . PRINCIPAL . "/mensajes");
        }
        $this->index();
        $this->render('index');
    }
    
    public function filtro() {
        $this->permisos_accion_individual('productos', 'filtro');
        $listaOrigenes = $this->Almacen->find('list', array('fields' => 'Almacen.id, Almacen.nombre', 'conditions' => array('Almacen.id >' => '0', 'Almacen.estatus' => 1, 'Almacen.tipo' => array(1, 3)), 'order' => 'Almacen.codigo'));
        $this->set('listaOrigenes', $listaOrigenes);
        $this->set('listaEstados', $this->Utilitario->lista_estados());
    }
    
    public function reporte_excel($formato = 1, $b = 1, $busq = null){
        $condiciones['Tabulador.id >'] = '0';
        $condiciones['Tabulador.estatus'] = 1;
        $busq = (strpos($busq, 'menuadmin') === false) ? $busq : '';
        if(!empty($busq)){
            if($b == 2){
                $dataSerializada = $this->serializador($busq, 1); //1 convierte la cadena serializada en un arreglo
                if(is_array($dataSerializada)){
                    extract($dataSerializada);
                    if(!empty($origen_id))
                        $condiciones['Tabulador.origen_id'] = $origen_id;
                    if(!empty($estado_id))
                        $condiciones['Destino.estado_id'] = $estado_id;
                    if(!empty($destino_id))
                        $condiciones['Tabulador.destino_id'] = $destino_id;
                    if(!empty($caleta_carga))
                        $condiciones['CAST(Tabulador.caleta_carga AS varchar(20)) ILIKE'] = "%" . $this->Interfaz->miles_postgres($caleta_carga) . "%";
                    if(!empty($caleta_descarga))
                        $condiciones['CAST(Tabulador.caleta_descarga AS varchar(20)) ILIKE'] = "%" . $this->Interfaz->miles_postgres($caleta_descarga) . "%";
                    if(!empty($distancia))
                        $condiciones['CAST(Tabulador.distancia AS varchar(20)) ILIKE'] = "%" . $this->Interfaz->miles_postgres($distancia) . "%";
                    if(!empty($flete))
                        $condiciones['CAST(Tabulador.flete AS varchar(20)) ILIKE'] = "%" . $this->Interfaz->miles_postgres($flete) . "%";

                    $data = $this->Tabulador->find('all', array('conditions' => $condiciones, 'order' => 'Almacen.codigo, Almacen.nombre, Destino.codigo, Destino.nombre'));
                    $this->set('data', $data);
                }
            } else
		$this->_principal_buscador_reporte('Tabulador', $busq);
        } else {
            $data = $this->Tabulador->find('all', array('conditions' => $condiciones, 'order' => 'Almacen.codigo, Almacen.nombre, Destino.codigo, Destino.nombre'));
            $this->set('data', $data);
        }
        $this->set('formato', $formato);
    }
    
    public function buscarDestinos($id = null, $idEstado = null){
        $listaDestinos = $this->Almacen->find('list', array('fields' => 'Almacen.id, Almacen.nombre', 'conditions' => array('Almacen.estado_id' => $idEstado, 'Almacen.estatus' => 1, 'Almacen.tipo' => array(2, 3)), 'order' => 'Almacen.codigo'));
        $this->set('listaDestinos', $listaDestinos);
        $this->set('buscar', $id);
    }
    
    public function validarDestino($id = null, $idOrigen = null, $idDestino = null){
        $id = (!empty($id)) ? $this->Interfaz->id($id) : 0;
        $resultado = $this->Tabulador->find('first', array('conditions' => array('Tabulador.id !=' => $id, 'Tabulador.origen_id' => $idOrigen, 'Tabulador.destino_id' => $idDestino, 'Tabulador.estatus' => 1)));
        if(!empty($resultado)){
            echo "<script type='text/javascript'> document.getElementById('destino_id').selectedIndex = 0; </script>";
            $this->Vista->mensaje("Tabulador ya registrado", 'ERROR');
        }
        $this->render("../" . PRINCIPAL . "/mensajes");
    }
    
    public function buscarTabulador($idOrigen = null, $idDestino = null){
        if(!empty($idOrigen) && !empty($idDestino))
            $resultado = $this->Tabulador->find('first', array('conditions' => array('Tabulador.origen_id' => $idOrigen, 'Tabulador.destino_id' => $idDestino, 'Tabulador.estatus' => 1)));
        if(!empty($resultado['Tabulador']['caleta_carga'])){
            echo "<script type='text/javascript'>
                    //document.getElementById('flete').value = '{$resultado['Tabulador']['flete']}'.replace(/\./g, ',');
                    document.getElementById('precio_ton').value = '{$resultado['Tabulador']['precio_ton']}'.replace(/\./g, ',');
                    document.getElementById('caleta_carga').value = '{$resultado['Tabulador']['caleta_carga']}'.replace(/\./g, ',');
                    document.getElementById('caleta_descarga').value = '{$resultado['Tabulador']['caleta_descarga']}'.replace(/\./g, ',');
                </script>";
        }
        
        $this->render("../" . PRINCIPAL . "/mensajes");
    }

}
